<?php

namespace App\Base;

use ReflectionClass;

/**
 * 全站基础对象类
 */
class BaseClass
{
    public function __construct()
    {
    }

    public function toArray($propertyNeedFormat = false,$replaceChar = "_"){
        //遍历本类的所有属性，不为false就构造成数组输出
        $reflection = new ReflectionClass($this);
        // 获取类的所有属性
        $properties = $reflection->getProperties();
        // 遍历属性并过滤掉值为 false 的属性
        $filteredProperties = [];
        foreach ($properties as $property) {
            // 获取属性的值
            $propertyName = $property->getName();
            // 只有当值不是 false 时，才添加到数组中
            if ($propertyName !== false) {
                $keyPropertyName = $propertyName;
                if($propertyName){
                    $keyPropertyName = $this->camelCaseToSnakeCase($keyPropertyName,$replaceChar);
                }
                $filteredProperties[$keyPropertyName] = $this->$propertyName;
            }
        }
        return $filteredProperties;
    }

    protected function camelCaseToSnakeCase($camelCaseString,$replaceChar) {
        // 使用 preg_replace 函数将驼峰命名转换为下划线分割的形式
        return strtolower(preg_replace('/([A-Z])/', "{$replaceChar}$1", $camelCaseString));
    }
}
